
module.exports = class TransformCode{
    constructor(){
        // header 总长度为 4个字节
        this.headerLen = 4
        // 编号
        this.serialNum = 0
        // 编号长度为 2 个字节
        this.serialLen = 2
        // 还剩余两个字节存放长度
    }

    // 编码
    encode(data,serialNum){
        const  body = Buffer.from(data)
        // header
        const  header = Buffer.alloc(this.headerLen)
        header.writeInt16BE(serialNum || this.serialNum) // 序列号
        header.writeInt16BE(body.length,this.serialLen) // 长度
        if(!serialNum){
            this.serialNum ++
        }
        return Buffer.concat([header,body])
    }

    // 解码
    decode(buffer){
        const header = buffer.slice(0,this.headerLen)
        const body = buffer.slice(this.headerLen).toString()
        return {
            serialNum: header.readInt16BE(),
            bodyLength: header.readInt16BE(this.serialLen),
            body
        }
    }

    // 获取字节长度
    getLen(buffer){
        if(buffer.length < this.headerLen){
            return 0
        }
        // buffer.readInt16BE(2) 读取第 2个字，也就是第 3、4 字节即 body 长度
        return this.headerLen + buffer.readInt16BE(this.serialLen)
    }
}